#ifndef PDFPAGEMANAGER_H
#define PDFPAGEMANAGER_H

#include <QObject>
#include <QImage>
#include <QList>
#include <QString>
#include "outputsettings.h"
#include "layoutstatemanager.h"
#include "unifiedfileinfo.h"  // For FileInfo definition

/**
 * PDF页面管理器 - 负责生成最终PDF的所有页面
 *
 * 职责：
 * 1. 统一生成最终PDF所有页面（封面+内容页）
 * 2. 处理多文件整合
 * 3. 应用布局模式（单栏/双栏/三栏）
 * 4. 确保预览与导出一致性
 *
 * 设计原则：Single Source of Truth
 * - 只有这个类负责生成最终PDF页面
 * - PageView显示什么，PDF就导出什么
 */
class PDFPageManager : public QObject
{
    Q_OBJECT

public:
    explicit PDFPageManager(QObject *parent = nullptr);
    ~PDFPageManager();

    /**
     * 生成最终PDF的所有页面（核心方法）
     * @param files 文件列表（按顺序处理，每个文件有自己的布局模式）
     * @param settings 输出设置（包含封面等）
     * @return 最终PDF页面列表（包含封面+所有文件的组合页面）
     */
    QList<QImage> generateFinalPDFPages(const QList<FileInfo>& files,
                                       const OutputSettings& settings);

    /**
     * 生成封面页
     * @param settings 包含封面标题、副标题等信息
     * @return 渲染好的封面页图像
     */
    QImage generateCoverPage(const OutputSettings& settings);

    /**
     * 生成所有内容页（多文件整合+布局应用）
     * @param files 文件列表
     * @param mode 布局模式（单栏/双栏/三栏）
     * @return 所有内容页的组合页面
     */
    QList<QImage> generateContentPages(const QList<FileInfo>& files,
                                     LayoutMode mode);

    /**
     * 生成单个组合页面
     * @param sourcePages 源页面列表
     * @param mode 布局模式
     * @return 组合后的单页
     */
    QImage generateCompositePage(const QList<QImage>& sourcePages,
                               LayoutMode mode);

    /**
     * 计算最终PDF总页数
     * @param files 文件列表
     * @param settings 输出设置
     * @return 总页数（包含封面）
     */
    int calculateTotalPages(const QList<FileInfo>& files,
                          const OutputSettings& settings);

    /**
     * 设置缓存管理器（用于加载原始页面）
     */
    void setCacheManager(class UnifiedCacheManager* cacheManager);

signals:
    /**
     * 页面生成进度信号
     * @param current 当前处理的页面索引
     * @param total 总页面数
     * @param info 当前处理信息
     */
    void pageGenerationProgress(int current, int total, const QString& info);

private:
    // 核心生成方法
    QList<QImage> loadOriginalPages(const QString& filePath);
    QImage renderCoverPageContent(const CoverPageSettings& coverSettings);

    // 布局处理方法（从MainWindow迁移过来）
    QList<QImage> rearrangePagesForColumns(const QList<QImage>& originalPages,
                                         LayoutMode mode);
    QList<QImage> rearrangeForTwoColumns(const QList<QImage>& originalPages);
    QList<QImage> rearrangeForThreeColumns(const QList<QImage>& originalPages);

    // 垂直流布局渲染（从MainWindow迁移过来）
    QImage renderVerticalFlowLayout(const QList<QList<QImage>>& columnImages,
                                  const QList<int>& columnImageWidths,
                                  int columns, int columnWidth, int columnSpacing,
                                  int marginTop, int marginLeft, int marginBottom,
                                  int a4Width, int a4Height, int availableHeight);

    // 成员变量
    class UnifiedCacheManager* m_cacheManager;

    // 常量
    static const int A4_WIDTH = 2480;   // A4宽度（300 DPI）
    static const int A4_HEIGHT = 3508;  // A4高度（300 DPI）
    static const int COLUMN_SPACING = 40; // 栏间距
    static const int MARGIN_SIZE = 60;    // 页边距
};

#endif // PDFPAGEMANAGER_H